package ppdvi_pack.dao;

import java.io.Serializable;

import java.util.Date;
import java.util.List;

import ppdvi_pack.model.Tamanho;

import ppdvi_pack.util.HibernateUtil;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import ppdvi_pack.model.Cidade;
import ppdvi_pack.model.Cliente;


import ppdvi_pack.model.Escola;
import ppdvi_pack.model.Produto;
import ppdvi_pack.model.ProdutoEscola;

import ppdvi_pack.model.SituacaoCliente;
import ppdvi_pack.model.TipoProduto;
import ppdvi_pack.model.TipoProdutoTamanho;

import ppdvi_pack.util.Utilidades;

public class AllDAO {

    public AllDAO() {
        super();
        session = HibernateUtil.getSessionFactory().openSession();
    }

    private Session session;

    public void inserir(Object objeto) {
        Transaction t = session.beginTransaction();
        //Tamanho tamanho = new Tamanho();
        session.save(objeto);
        t.commit();
    }

    public void delete(Object objeto) {
        Transaction t = session.beginTransaction();
        session.delete(objeto);
        t.commit();
    }

    public void salvar(Object objeto) {
        Transaction t = session.beginTransaction();
        session.merge(objeto);
        t.commit();
    }
    //java.util

    public List<Object> findAll(String nomeClasse) {
        Query q = session.createQuery("from " + nomeClasse + " order by id_cidade");
        return q.list();
    }

    public Cidade findCidadeById(int id) {
        return (Cidade)session.load(Cidade.class, id);
    }

    public Cliente findClienteById(int id) {
        return (Cliente)session.load(Cliente.class, id);
    }

    public Object findById(Object objeto, int id) {
        return (Object)session.load(objeto.getClass(), id);
    }

    public List<Object> findGenerico(String nomeClasse, String campo, String condicao, String valor,
                                     String ordenacao) {

        if (!ordenacao.isEmpty()) {
            ordenacao = "order by " + ordenacao;
        }

        Query q =
            session.createQuery("from " + nomeClasse + " where upper(" + campo + ") " + condicao + "  upper(" + valor +
                                ") " + ordenacao);
        return q.list();
    }

    public List<Object> carregarProdutosEscola(Escola escola) {

        if (escola.getId_escola() != 0) {
            Query q = session.createQuery("from ProdutoEscola where produtoEscolaPK.escola.id_escola  = " + escola.getId_escola());
            return q.list();
        } else {
            return null;
        }
    }
    public static void main(String [ ] args)
    {
        AllDAO dao = new AllDAO();
        SituacaoCliente sc  = new  SituacaoCliente();
        sc.setId_situacao(1);
        sc.setDescricao("Ativo");
        dao.salvar(sc);
    }
 
}
